# :title: API Tripbook
#
# Author:: Adrian Matteo, Daniel Quijada, Edduar Serrano
#
# Clase utilizada para generar y manejar toda la informacion
# correspondiente a las amistades entre usuarios.

class FriendshipsController < ApplicationController
	
	# Crea en la base de datos un registro que contiene al
	# usuario actual como principal y al solicitado como secundario
	# con un status de espera de confirmacion y crea un registro
	# con el solicitado como principal y el actual como secundario
	# con un status de notificacion pendiente.
	def create
		@friendship_1 = Friendship.new()
		@friendship_1.user_a_id = params[:user_a_id]
		@friendship_1.user_b_id = params[:user_b_id]
		@friendship_1.status = 2
		success = @friendship_1 && @friendship_1.save
		if success && @friendship_1.errors.empty?
			@friendship_2 = Friendship.new()
			@friendship_2.user_b_id = params[:user_a_id]
			@friendship_2.user_a_id = params[:user_b_id]
			@friendship_2.status = 3
			success = @friendship_2 && @friendship_2.save
			if success && @friendship_2.errors.empty?
				notification(User.find_by_id(params[:user_a_id]),User.find_by_id(params[:user_b_id]))
				flash[:notice] = "Solicitud de amistad enviada exitosamente."
				redirect_to :controller => "users", :action => "home", :id => current_user.id
			else
				flash[:error]  = "Disculpe, no pudimos enviar su solicitud de amistad, Intente de nuevo."
				redirect_to :controller => "users", :action => "home", :id => current_user.id		
			end
		end
	end
	
	# Envia el correo electronico correspondiente, al usuario
	# que se le ha solicitado la amistad.
	def notification (sender,recipient)
		title = sender.name+" "+sender.lastname+" quiere ser tu amigo en Tripbook!"
		message = "Este correo es para informarte que "+sender.name+" "+sender.lastname+" te ha enviado
		una solicitud de amigos en Tripbook, dirigite a tu perfil para confirmar esta amistad"
		Emailer.deliver_notification(title,message,recipient.email)	
	end
	
	# Metodo encargado de cambiar el status de la amistad en caso de ser aceptada.
	def accept_friend
		friendship1 = Friendship.find_by_user_a_id_and_user_b_id(current_user.id,params[:id])
		if friendship1 != nil and friendship1.status == 3
			if friendship1.update_attributes(:status => 1)
				friendship2 = Friendship.find_by_user_a_id_and_user_b_id(params[:id],current_user.id)
				if friendship2 != nil and friendship2.status == 2
					if friendship2.update_attributes(:status => 1)
						redirect_to :controller => "users", :action => "home", :id => current_user.id
					end
				end
			end
		end
	end
	
	# Metodo encargado de cambiar el status de la amistad en caso de ser rechazada.
	def reject_friend
		friendship1 = Friendship.find_by_user_a_id_and_user_b_id(current_user.id,params[:id])
		if friendship1 != nil and friendship1.status == 3
			if friendship1.destroy
				
				friendship2 = Friendship.find_by_user_a_id_and_user_b_id(params[:id],current_user.id)
				if friendship2 != nil and friendship2.status == 2
					if friendship2.destroy
						redirect_to :controller => "users", :action => "home", :id => current_user.id
					end
				end
			end
		end	
	end
	
end